define(['jquery','template'], function($,template) {
	//template.config("openTag", "[[");
	//template.config("closeTag", "]]");
	/** 
	 * 对日期进行格式化， 
	 * @param date 要格式化的日期 
	 * @param format 进行格式化的模式字符串
	 *     支持的模式字母有： 
	 *     y:年, 
	 *     M:年中的月份(1-12), 
	 *     d:月份中的天(1-31), 
	 *     h:小时(0-23), 
	 *     m:分(0-59), 
	 *     s:秒(0-59), 
	 *     S:毫秒(0-999),
	 *     q:季度(1-4)
	 * @return String
	 * @author yanis.wang
	 * @see	http://yaniswang.com/frontend/2013/02/16/dateformat-performance/
	 */
	template.helper('dateFormat', function(_date, format) {
		if(_date==undefined || _date=='undefined' || _date=='') return "";
		date = new Date();
		if(_date.length==13){
			date.setTime(_date);
		}else if(_date.length==10){
			date.setTime(_date*1000);
		}
		var map = {
			"M": date.getMonth() + 1, //月份 
			"d": date.getDate(), //日 
			"h": date.getHours(), //小时 
			"m": date.getMinutes(), //分 
			"s": date.getSeconds(), //秒 
			"q": Math.floor((date.getMonth() + 3) / 3), //季度 
			"S": date.getMilliseconds() //毫秒 
		};
		format = format.replace(/([yMdhmsqS])+/g, function(all, t) {
			var v = map[t];
			if(v !== undefined) {
				if(all.length > 1) {
					v = '0' + v;
					v = v.substr(v.length - 2);
				}
				return v;
			} else if(t === 'y') {
				return(date.getFullYear() + '').substr(4 - all.length);
			}
			return all;
		});
		return format;
	});
	/*字符串截取长度*/
	template.helper("substring",function(str, len){
		if((typeof str == 'string')){
			if(str.length > len){
				return str.substring(0, len)+"...";
			}
		}
	    return str;
	});
	/**
	 * 判断对象是否存在
	 */
	template.helper("isEmpty",function(data){
		if((typeof data !='undefined')){
			if(typeof data == 'object' && data instanceof Array && data.length==0){
				return true;
			}else if(typeof data == 'string' && data == '' ){
				return true;
			}
			return false;
		}
	    return true;
	});
	/**
	 * array 排序
	 * data 待排序数据
	 * key 排序字段
	 * isasc 是否asc
	 */
	template.helper("arraySort",function(data,key,isasc){
		if(typeof isasc !='boolean'){
			isasc=true;
		}
		if(typeof data =='object' && data instanceof Array && typeof key == 'string'){
			data=data.sort(function(a,b){
				if((a[key]-0)>(b[key]-0)){
					return isasc;
				}else{
					return !isasc;
				}
			});
		}
		return data;
	});
	/**
	 * 获取map数据
	 */
	template.helper("mapget",function(datamap,key){
		if(typeof datamap =='object' && typeof key =='string'){
			return datamap[key];
		}
		return {};
	});
	
	/**
	 * 小数点后面几位四舍五入
	 */
	template.helper("toFixed",function(data,len){
		if(!isNaN(data) && !isNaN(len) && len> 0){
			return data.toFixed(len);
		}
		return data;
	});
	
	/**************************下面是模块化实现代码***************************/
	
	(function($) {
		window.ArtModel={
				artmodelobj:{}
		};
		
		window.ArtModel.artmodel=function($model){
			for(_key in $model){
				window.ArtModel.artmodelobj[_key]=$model[_key];
			}
			return this;
		};
		$.extend({artmodel : window.ArtModel.artmodel});
		$.fn.extend({artmodel : window.ArtModel.artmodel});
		
	})(jQuery);


	/**
	 * art模块加载器   必要时候需要控制器支持
	 */
	var loadartModel = function($dom){
		if(typeof window.ArtModel === 'object' && typeof window.ArtModel.artmodelobj === 'object'){
			var _dom = document;
			if(typeof $dom === 'string' || typeof $dom === 'object'){
				_dom = $dom;
			}
			$(_dom).find('div[art-model][active],script[art-model][active]').each(function($index,$data){
				// 获取标签上的属性
				var $thiz = $(this);
				var _am = $thiz.attr('art-model');
				$thiz.removeAttr('art-model');
				var _ac =  $thiz.attr('art-controller');
				$thiz.removeAttr('art-controller');
				var _apobj = {};
				if(typeof $thiz.attr('art-param') === 'string'){
					_apobj =$.parseJSON($thiz.attr('art-param'));
					$thiz.removeAttr('art-param');
				}
				
				// 获得定义的模块信息
				var _artmodelobj = window.ArtModel.artmodelobj[_am];
				if(typeof _artmodelobj === 'object'){
					var _tmpl = _artmodelobj.templateUrl;
					var _tplHtml = '';
					// 获取模板内容
					if(typeof _tmpl === 'string'){
						_tplHtml = $.setHTML(_tmpl);
					}
					// 如果标签上控制器不存在那么使用模块上的控制器
					if(typeof _ac === 'undefined' && typeof _artmodelobj.controller === 'string'){
						_ac=_artmodelobj.controller;
					}

					// 获取控制器执行代码
					if(typeof _ac === 'string' && typeof window.RouterController[_ac] === 'function'){
						var _defobj = {};
						// 执行控制器
						window.RouterController[_ac](function($modeldata){
							if('SCRIPT' === $thiz.get(0).tagName){
								$thiz.after(template.compile(_tplHtml)($modeldata));
								$thiz.remove();
							}else{
								$thiz.html(template.compile(_tplHtml)($modeldata));
							}
						},_tplHtml,_defobj,_artmodelobj,_apobj,$thiz);
					}else{
						// 如果无控制器那么直接设置
						if('SCRIPT' === $thiz.get(0).tagName){
							$thiz.after(_tplHtml);
							$thiz.remove();
						}else{
							$thiz.html(_tplHtml);
						}
					}
				}
			});
		}
	};
	
	var htmlSetData=function(out_id,html_url,dataobj){
		$(out_id).html(template.compile($.setHTML(html_url))(dataobj));
	};
	$.extend({htmlSetData : htmlSetData});
	$.fn.extend({htmlSetData:htmlSetData});
	return {
		template: template,
		auload:loadartModel
	}
});